package model

import (
	"errors"
	"ginblog/tools/pagination"
	"ginblog/utils/errmsg"
	"gorm.io/gorm"
)

type Tag struct {
	BaseModel
	TagName string `gorm:"type:varchar(20);not null;comment:'类别'" json:"tag_name"`
}

// SelectAllTag /查询所有文章
func (t *Tag) SelectAllTag(page *pagination.Pagination) {
	var tag []Tag
	err := Db.Limit(page.GetPageSize()).Offset(page.GetOffset()).Find(&tag).Count(&page.Total).Error
	if err != nil {
		t.SteCodeMsg(errmsg.ERROR)
	}
	page.SetTotalPage()
	page.Data = tag
}

// AddTag /新增文章
func (t *Tag) AddTag() bool {
	err := Db.Create(&t).Error
	if err != nil {
		return false
	}
	return true
}

// EditTag /编辑分类
func (t *Tag) EditTag() bool {
	err := Db.Model(&t).Where("id = ? ", t.ID).Omit("Id").Updates(t).Error
	if err != nil {
		return false
	}
	return true
}

// DelTag /删除分类
func (t *Tag) DelTag() bool {
	err := Db.Delete(&Tag{}, t.ID).Error
	if err != nil {
		return false
	}
	return true
}

func (t *Tag) IsTagNameRepeat() bool {
	tag := Tag{}
	result := Db.Where(Tag{TagName: t.TagName}).Find(&tag)
	if result.RowsAffected > 0 {
		return true
	}
	return false
}

func (t *Tag) BeforeCreate(tx *gorm.DB) (err error) {
	if t.TagName != "" && t.IsTagNameRepeat() {
		err = errors.New(errmsg.GetErrMsg(errmsg.TAG_NAME_IS_USE))
		t.SteCodeMsg(errmsg.TAG_NAME_IS_USE)
	}
	return
}

func (t *Tag) BeforeSave(tx *gorm.DB) (err error) {
	if t.TagName != "" && t.IsTagNameRepeat() {
		err = errors.New(errmsg.GetErrMsg(errmsg.TAG_NAME_IS_USE))
		t.SteCodeMsg(errmsg.TAG_NAME_IS_USE)
	}
	return
}
